
#include "TiposObstaculos.h"

TipoCajaInterrogacion* GestionTiposObstaculos::tipoCajaInterrogacion;
TipoCaneria* GestionTiposObstaculos::tipoCaneria;
TipoCamaElastica* GestionTiposObstaculos::tipoCamaElastica;
TipoCajaPow* GestionTiposObstaculos::tipoCajaPow;

void GestionTiposObstaculos::Inicializar(vector <TipoObstaculo_y> tiposObstaculos) {
	
	for (unsigned int i=0; i<tiposObstaculos.size(); i++) {
		
		if (tiposObstaculos[i].tipo == "CajaInterrogacion")
			tipoCajaInterrogacion = new TipoCajaInterrogacion(tiposObstaculos[i]);
		else if (tiposObstaculos[i].tipo == "Caneria")
			tipoCaneria = new TipoCaneria(tiposObstaculos[i]);
		else if (tiposObstaculos[i].tipo == "CamaElastica")
			tipoCamaElastica = new TipoCamaElastica(tiposObstaculos[i]);
		else if (tiposObstaculos[i].tipo == "CajaPow")
			tipoCajaPow = new TipoCajaPow(tiposObstaculos[i]);
	}
}

void GestionTiposObstaculos::AsignarTipoObstaculo(CajaInterrogacion* cajaInterrogacion) {
	
	tipoCajaInterrogacion->AsignarAObstaculo(cajaInterrogacion);
}

void GestionTiposObstaculos::AsignarTipoObstaculo(Caneria* caneria) {
	
	tipoCaneria->AsignarAObstaculo(caneria);
}

void GestionTiposObstaculos::AsignarTipoObstaculo(CamaElastica* camaElastica) {
	
	tipoCamaElastica->AsignarAObstaculo(camaElastica);
}


void GestionTiposObstaculos::AsignarTipoObstaculo(CajaPow* cajaPow) {
	
	tipoCajaPow->AsignarAObstaculo(cajaPow);
}

TipoCajaInterrogacion::TipoCajaInterrogacion(TipoObstaculo_y tipoObstaculo) {
	
	vector<Animacion_y> animaciones = tipoObstaculo.animaciones;
	
	vector<string> descripcionParticulares = EstadoCajaInterrogacion::descripcionAccionesParticulares;
	vector<infoAccion_t> v_accionesParticulares = AsignarParticulares(tipoObstaculo.ancho, tipoObstaculo.alto, descripcionParticulares, &animaciones);
	
	for (unsigned int i=0; i<descripcionParticulares.size(); i++) {
		accionesParticulares.push_back(v_accionesParticulares[i]);
	}
	
	Inicializar(tipoObstaculo.ancho, tipoObstaculo.alto, animaciones);
}

void TipoCajaInterrogacion::AsignarAObstaculo(CajaInterrogacion* cajaInterrogacion) {
	
	AsignarAObjeto(cajaInterrogacion);
	
	for (unsigned int k=0; k<accionesParticulares.size(); k++) {
		cajaInterrogacion->addAccionParticular(accionesParticulares[k].idImagen, accionesParticulares[k].cuadros);
	}
}

TipoCaneria::TipoCaneria(TipoObstaculo_y tipoObstaculo) {
	
	vector<Animacion_y> animaciones = tipoObstaculo.animaciones;
	Inicializar(tipoObstaculo.ancho, tipoObstaculo.alto, animaciones, ESPEJADA);
}

void TipoCaneria::AsignarAObstaculo(Caneria* caneria) {
	
	AsignarAObjeto(caneria);
}

TipoCamaElastica::TipoCamaElastica(TipoObstaculo_y tipoObstaculo) {
	
	vector<Animacion_y> animaciones = tipoObstaculo.animaciones;
	Inicializar(tipoObstaculo.ancho, tipoObstaculo.alto, animaciones);
}

void TipoCamaElastica::AsignarAObstaculo(CamaElastica* camaElastica) {
	
	AsignarAObjeto(camaElastica);
}

TipoCajaPow::TipoCajaPow(TipoObstaculo_y tipoObstaculo) {
	
	vector<Animacion_y> animaciones = tipoObstaculo.animaciones;
	
	vector<string> descripcionParticulares = EstadoCajaPow::descripcionAccionesParticulares;
	vector<infoAccion_t> v_accionesParticulares = AsignarParticulares(tipoObstaculo.ancho, tipoObstaculo.alto, descripcionParticulares, &animaciones);
	
	for (unsigned int i=0; i<descripcionParticulares.size(); i++) {
		accionesParticulares.push_back(v_accionesParticulares[i]);
	}
	
	Inicializar(tipoObstaculo.ancho, tipoObstaculo.alto, animaciones);
}

void TipoCajaPow::AsignarAObstaculo(CajaPow* cajaPow) {
	
	AsignarAObjeto(cajaPow);
	
	for (unsigned int k=0; k<accionesParticulares.size(); k++) {
		cajaPow->addAccionParticular(accionesParticulares[k].idImagen, accionesParticulares[k].cuadros);
	}
}